package me.boot.gen.uid.propertites;

import com.baidu.fsg.uid.buffer.RejectedPutBufferHandler;
import com.baidu.fsg.uid.buffer.RejectedTakeBufferHandler;
import com.baidu.fsg.uid.buffer.RingBuffer;
import lombok.Getter;
import lombok.Setter;

/**
 * @Description:
 * @author: Sylar
 * @date: 2021年10月26日 3:12 下午
 */
@Getter
@Setter
public class CacheId extends DefaultId {
    /**
     * RingBuffer size扩容参数, 可提高UID生成的吞吐量.
     * 默认:3， 原bufferSize=8192, 扩容后bufferSize= 8192 << 3 = 65536
     */
    private int boostPower = 3;
    /**
     * 指定何时向RingBuffer中填充UID, 取值为百分比(0, 100), 默认为50
     * 举例: bufferSize=1024, paddingFactor=50 -> threshold=1024 * 50 / 100 = 512.
     * 当环上可用UID数量 < 512时, 将自动对RingBuffer进行填充补全
     */
    private int paddingFactor = RingBuffer.DEFAULT_PADDING_PERCENT;
    /**
     * 另外一种RingBuffer填充时机, 在Schedule线程中, 周期性检查填充
     * 默认:不配置此项, 即不实用Schedule线程. 如需使用, 请指定Schedule线程时间间隔, 单位:秒
     */
    private Long scheduleInterval = 5 * 60L;
    /**
     * 拒绝策略: 当环已满, 无法继续填充时
     * 默认无需指定, 将丢弃Put操作, 仅日志记录. 如有特殊需求, 请实现RejectedPutBufferHandler接口(支持Lambda表达式)
     */
    private Class<? extends RejectedPutBufferHandler> rejectedPutBufferHandlerClass;
    /**
     * 拒绝策略: 当环已空, 无法继续获取时
     * 默认无需指定, 将记录日志, 并抛出UidGenerateException异常. 如有特殊需求, 请实现RejectedTakeBufferHandler接口(支持Lambda表达式)
     */
    private Class<? extends RejectedTakeBufferHandler> rejectedTakeBufferHandlerClass;
}
